package com.yunke.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yunke.entity.YunkeFile;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 文件管理Mapper接口
 * 
 * @author yunke
 * @since 1.0.0
 */
@Mapper
public interface YunkeFileMapper extends BaseMapper<YunkeFile> {

    /**
     * 分页查询文件列表
     */
    IPage<YunkeFile> selectFilePage(Page<YunkeFile> page,
                                   @Param("fileType") Integer fileType,
                                   @Param("fileCategory") String fileCategory,
                                   @Param("businessType") String businessType,
                                   @Param("uploadUserId") Long uploadUserId);

    /**
     * 根据业务查询文件列表
     */
    List<YunkeFile> selectByBusiness(@Param("businessType") String businessType,
                                    @Param("businessId") Long businessId);

    /**
     * 根据用户查询文件列表
     */
    List<YunkeFile> selectByUser(@Param("userId") Long userId,
                                @Param("fileType") Integer fileType,
                                @Param("fileCategory") String fileCategory);

    /**
     * 增加下载次数
     */
    int incrementDownloadCount(@Param("id") Long id);

    /**
     * 增加访问次数
     */
    int incrementAccessCount(@Param("id") Long id);

    /**
     * 查询临时文件
     */
    List<YunkeFile> selectTempFiles();

    /**
     * 查询过期文件
     */
    List<YunkeFile> selectExpiredFiles();

    /**
     * 统计文件大小
     */
    long getTotalSize(@Param("userId") Long userId,
                     @Param("fileType") Integer fileType,
                     @Param("fileCategory") String fileCategory);

    /**
     * 统计文件数量
     */
    long countFiles(@Param("userId") Long userId,
                   @Param("fileType") Integer fileType,
                   @Param("fileCategory") String fileCategory);

    /**
     * 查询所有分类
     */
    List<String> selectAllCategories();

    /**
     * 更新文件分类
     */
    int updateFileCategory(@Param("id") Long id,
                          @Param("fileCategory") String fileCategory,
                          @Param("userId") Long userId);

    /**
     * 根据MD5查询文件
     */
    YunkeFile selectByMd5(@Param("fileMd5") String fileMd5);

    /**
     * 批量删除文件
     */
    int batchDeleteFiles(@Param("ids") List<Long> ids,
                        @Param("userId") Long userId);

    /**
     * 获取用户文件统计
     */
    List<Object> getUserFileStatistics(@Param("userId") Long userId);
} 